package com.ruoyi.wvp.service.impl;

import java.util.List;
import com.ruoyi.common.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.wvp.mapper.DataRoleMapper;
import com.ruoyi.wvp.domain.DataRole;
import com.ruoyi.wvp.service.IDataRoleService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.common.enums.DeletedEnum;
import com.ruoyi.common.utils.StringUtils;
import java.util.Objects;
/**
 * 部门数据权限Service业务层处理
 * 
 * @author ruoyi
 * @date 2024-08-11
 */
@Service
@Slf4j
public class DataRoleServiceImpl extends ServiceImpl<DataRoleMapper,DataRole> implements IDataRoleService {
    @Autowired
    private DataRoleMapper dataRoleMapper;

    /**
     * 查询部门数据权限
     * 
     * @param id 部门数据权限主键
     * @return 部门数据权限
     */
    @Override
    public DataRole selectDataRoleById(Long id)    {
        return dataRoleMapper.selectDataRoleById(id);
    }

    /**
     * 查询部门数据权限列表
     * 
     * @param dataRole 部门数据权限
     * @return 部门数据权限
     */
    @Override
    public List<DataRole> selectDataRoleList(DataRole dataRole)    {
        return dataRoleMapper.selectDataRoleList(dataRole);
    }

    /**
     * 新增部门数据权限
     * 
     * @param dataRole 部门数据权限
     * @return 结果
     */
    @Override
    public int insertDataRole(DataRole dataRole)    {
        dataRole.setCreateTime(DateUtils.getNowDate());
        return dataRoleMapper.insertDataRole(dataRole);
    }

    /**
     * 修改部门数据权限
     * 
     * @param dataRole 部门数据权限
     * @return 结果
     */
    @Override
    public int updateDataRole(DataRole dataRole)    {
        dataRole.setUpdateTime(DateUtils.getNowDate());
        return dataRoleMapper.updateDataRole(dataRole);
    }

    /**
     * 批量删除部门数据权限
     * 
     * @param ids 需要删除的部门数据权限主键
     * @return 结果
     */
    @Override
    public int deleteDataRoleByIds(Long[] ids)    {
        return dataRoleMapper.deleteDataRoleByIds(ids);
    }

    /**
     * 删除部门数据权限信息
     * 
     * @param id 部门数据权限主键
     * @return 结果
     */
    @Override
    public int deleteDataRoleById(Long id)    {
        return dataRoleMapper.deleteDataRoleById(id);
    }


       @Override
        public Page<DataRole> pageList(Page<DataRole> page, DataRole dataRole) {
            LambdaQueryWrapper<DataRole> queryWrapper = getQueryWrapper(dataRole);
            return page(page, queryWrapper);
        }

        @Override
        public List<DataRole> listAll(DataRole dataRole) {
            return list(getQueryWrapper(dataRole));
        }

        private  LambdaQueryWrapper<DataRole> getQueryWrapper(DataRole dataRole) {
            LambdaQueryWrapper<DataRole> queryWrapper = Wrappers.lambdaQuery(DataRole.class);
            queryWrapper.eq(DataRole::getDeleted, DeletedEnum.NOMAL.getValue());

//        角色名称
                        if(StringUtils.isNotEmpty(dataRole.getName())){
                           queryWrapper.like(DataRole::getName,dataRole.getName());
                        }


//        显示顺序
                            if(Objects.nonNull(dataRole.getSort())){
                               queryWrapper.eq(DataRole::getSort,dataRole.getSort());
                            }


//        数据范围（1：全部数据权限 2：自定数据权限 3：本部门数据权限 4：本部门及以下数据权限）
                         if(StringUtils.isNotEmpty(dataRole.getDataScope())){
                            queryWrapper.eq(DataRole::getDataScope,dataRole.getDataScope());
                         }


//        菜单树选择项是否关联显示
                            if(Objects.nonNull(dataRole.getMenuCheckStrictly())){
                               queryWrapper.eq(DataRole::getMenuCheckStrictly,dataRole.getMenuCheckStrictly());
                            }


//        部门树选择项是否关联显示
                            if(Objects.nonNull(dataRole.getDeptCheckStrictly())){
                               queryWrapper.eq(DataRole::getDeptCheckStrictly,dataRole.getDeptCheckStrictly());
                            }


//        角色状态（0正常 1停用）
                         if(StringUtils.isNotEmpty(dataRole.getStatus())){
                            queryWrapper.eq(DataRole::getStatus,dataRole.getStatus());
                         }








            return queryWrapper;
        }
}
